exports.uploadFile = function(req,res){

    var fs          = require('fs');
    var path        = require('path');
    
    var oldpath     = "";
    var newFileName = "";
    var dir         = "";
    var newDir      = "";
    var newpath     = "";
    var resultData  = {};

    //创建上传对象
    var U 	         = new formidable.IncomingForm();
    U.encoding       = 'utf-8';
    U.uploadDir      = "./" + config.fileManager.baseDir + "/temp/";
    U.keepExtensions = config.fileManager.keepExtensions;
    U.maxFileSize	 = 200 * 1024 * 1024;

    //验证操作
    function fileValidation(cb){

        U.parse(req, function (error, fields, files) {

            if(JSON.stringify(files) == '{}'){
                return RES.errorResponse("文件上传失败，失败原因：没有找到要进行上传的文件");
            }

            if(files.files == undefined) {
                return RES.errorResponse("文件上传失败，失败原因：文件参数必须为 files 请检查上传文件的参数名");
            }

            //上传系统错误
            if(error) {
                return RES.errorResponse("文件上传失败，请重新尝试");
            }

            //判断是否支持该文件类型的上传
            var extFileName = files.files.name.split(".")[1];
            if(config.fileManager.noUploadType.indexOf(extFileName) != - 1){
                return RES.errorResponse("文件上传失败，原因：不支持该文件类型的上传");
            }

            //判断文件大小是否允许
            var maxSize = files.files.size;
            if(maxSize > config.fileManager.maxFileSize){
                return RES.errorResponse("文件上传失败，原因：文件大小超出了上传限制，仅允许上传最多 " +  (config.fileManager.maxFileSize/1024/1024) + " M的文件");
            }

            //获取原始名和新名称，进行替换
            oldpath = path.normalize(files.files.path);

            //如果用户设置了要上传文件的名称，则使用，否则使用文件自己默认的
            if(fields.filename != undefined){
                newFileName = fields.filename;
            }else{
                newFileName = files.files.name;
            }

            //判断是否有dir参数，如果有创建对应的文件夹目录
            if(fields.dir != undefined){

                dir = fields.dir + "/";

                newDir = './' + config.fileManager.baseDir + "/" + config.fileManager.uploadFileDir + "/" + fields.dir + "/";

                common.mkdirs(newDir,function(){

                    newpath = newDir + newFileName;
                    
                    cb();  
    
                })

            }else{

                newpath = './' + config.fileManager.baseDir + "/" + config.fileManager.uploadFileDir  + "/" + newFileName;

                cb();  
            }
        })

    }

    //上传操作
    function fileUpload(cb){

        //名称替换操作
        fs.rename(oldpath,newpath,function(err){

            resultData.url = config.server.ip + ":" + config.server.port + "/" + config.fileManager.uploadFileDir + "/" + dir + newFileName;

            cb();

        });

    }

    F.Serial([
        fileValidation,
        fileUpload
    ],function(){
        return RES.successResponse(resultData)
    });

}